package com.cbg.es.controller;

import com.cbg.es.dto.EsTableDTO;
import com.cbg.es.service.IEsTableService;
import com.cbg.es.vo.EsTableEditVO;
import com.cbg.es.vo.EsTableVO;
import com.cbg.vo.DelVO;
import com.cbg.vo.DirectionsVO;
import com.cbg.vo.StatusVO;
import com.shuyuwl.core.support.ServerResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 表管理Controller
 *
 * @author wangjuzheng
 * @date 2019-10-24
 **/
@RestController
@Api(tags = "全景通查-表管理")
@RequestMapping("/api/es/table")
@CrossOrigin(allowCredentials = "true", maxAge = 3600, allowedHeaders = "*", origins = "*")
public class EsTableController {

    @Resource
    private IEsTableService esTableService;

    /**
     * 获取未删除的基础表信息
     *
     * @return 模型
     */
    @GetMapping(value = "/list")
    @ApiOperation(value = "获取全部的基础表信息")
    public ServerResponse<List<EsTableDTO>> findAllEsTable() {

        //获取全部的基础表信息
        List<EsTableDTO> list = esTableService.findAllEsTable();
        return ServerResponse.createBySuccess(list);
    }

    /**
     * 基础表的添加
     *
     * @param esTableVO 基础表添加模型
     * @return 模型
     */
    @PostMapping
    @ApiOperation(value = "基础表的添加")
    public ServerResponse addTable(@Validated @RequestBody EsTableVO esTableVO) {

        //基础表的添加
        esTableService.addTable(esTableVO);
        return ServerResponse.createBySuccess("添加表成功");
    }

    /**
     * 基础表的修改
     *
     * @param esTableEditVO 基础表修改模型
     * @return 模型
     */
    @PutMapping
    @ApiOperation(value = "基础表的修改")
    public ServerResponse saveTable(@Validated @RequestBody EsTableEditVO esTableEditVO) {

        //基础表的修改
        esTableService.saveTable(esTableEditVO);
        return ServerResponse.createBySuccess("修改表成功");
    }

    /**
     * 基础表的删除
     *
     * @param delVO 删除参数模型
     * @return 模型
     */
    @DeleteMapping
    @ApiOperation(value = "基础表的删除")
    public ServerResponse deleteTable(@Validated @RequestBody DelVO delVO) {

        //基础表的删除
        esTableService.deleteTable(delVO.getIds());
        return ServerResponse.createBySuccess("操作成功");
    }

    /**
     * 基础表位置的移动
     *
     * @param directionsVO 移动VO
     * @return 模型
     */
    @PutMapping(value = "/directions")
    @ApiOperation(value = "基础表位置的移动")
    public ServerResponse updateDirections(@Validated @RequestBody DirectionsVO directionsVO) {

        //基础表位置的移动
        esTableService.updateDirections(directionsVO.getId(), directionsVO.directionType);
        return ServerResponse.createBySuccess("移动成功");
    }

    /**
     * 基础表状态的修改
     *
     * @param statusVO 列修改状态模型
     * @return 模型
     */
    @PutMapping("/status")
    @ApiOperation(value = "基础表状态的修改")
    public ServerResponse updateStatus(@Validated @RequestBody StatusVO statusVO) {

        //基础表状态的修改
        esTableService.updateStatus(statusVO);
        return ServerResponse.createBySuccess("成功");
    }

    /**
     * 获取基础表详细信息
     *
     * @param id 列id
     * @return 模型
     */
    @GetMapping(value = "/detail/{id}")
    @ApiOperation(value = "获取基础表详细信息")
    public ServerResponse<EsTableDTO> getDetails(@ApiParam(value = "表id") @PathVariable Long id) {

        //获取基础表详细信息
        EsTableDTO listDTOS = esTableService.getDetails(id);
        return ServerResponse.createBySuccess(listDTOS);
    }
}
